package bll

import (
	"proto/dto"
)

var (
	updateDataMap = map[dto.EnUpdateType]string{
		dto.EnUpdateType_ATTRIBUTE: MetaTypeAttribute, // 属性
		dto.EnUpdateType_STATUS:    MetaTypeStatus,    // 状态
	}
)

var ProcessEngine = NewProcessEngine()

type processEngine struct {
}

func NewProcessEngine() *processEngine {
	return &processEngine{}
}

func (p *processEngine) Init() error {
	return StateStorage.Init()
}

// SaveDesiredContext 保存设备影子期望状态
func (p *processEngine) SaveDesiredContext(deviceName string, updateType dto.EnUpdateType, items []*dto.Item) error {
	// TODO: 保证设备影子状态和期望状态一致，给设备端下发状态变更
	// TODO: 如果通知成功，删除期望状态
	return nil
}

// SaveContext 保存设备影子状态
func (p *processEngine) SaveContext(deviceName string, updateType dto.EnUpdateType, items []*dto.Item) error {
	// TODO: 保存设备影子状态
	for i := 0; i < len(items); i++ {
		if metaType, ok := updateDataMap[updateType]; !ok {
			continue
		} else {
			StateStorage.Put(StateTypeReported, deviceName, metaType, items[i].Key, items[i].Value)
		}
	}
	return nil
}
